package interfaz;

import clases.ClsContraladorEventos;
import clases.ClsDatabase;
import clases.ClsMetodos;
import clases.ClsSesion;
import clases.ClsValidacion;
import javax.swing.DefaultComboBoxModel;
import javax.swing.JDialog;
import javax.swing.JOptionPane;
import javax.swing.JTable;

/**
 *
 * @author Miguel mosquera
 */
public class dlg_NewInsumo extends javax.swing.JDialog {

    private ClsMetodos metodos = new ClsMetodos();
    private ClsDatabase bd = new ClsDatabase();
    private ClsContraladorEventos contraladorEventos = new ClsContraladorEventos();
    private String idTipoDeInsumo = "-1";
    private String idUnidad = "-1";
    private String idUsuario = "-1";
    private String idInsumoEditar = "-1";
    private String idCategoriaInsumo = "-1";
    private dlgInsumos2 dialog;
    private JTable table;
    private boolean editarUpdate = false;
    private DefaultComboBoxModel modelCboUnidad = new DefaultComboBoxModel();
    private DefaultComboBoxModel modelCboTipoInsumo = new DefaultComboBoxModel();
    private DefaultComboBoxModel modelCboTipoInsumo_Sub = new DefaultComboBoxModel();
    private DefaultComboBoxModel modelCboCategoriaInsumo = new DefaultComboBoxModel();
    String no_porcentaje = "";

    /**
     * Creates new form dlg_NewInsumo
     *
     * @param parent
     * @param modal
     */
    public dlg_NewInsumo(java.awt.Frame parent, boolean modal) {
        super(parent, modal);
        initComponents();
        setLocationRelativeTo(null);//Para centrar el JDialog
//        txtFechaIngreso.setEditable(false);
//        txtFechaModificado.setEditable(false);
    }

    public dlg_NewInsumo(java.awt.Frame parent, boolean modal, JDialog dialog, JTable table) {
        super(parent, modal);
        initComponents();
        this.dialog = (dlgInsumos2) dialog;
        this.table = table;
        setLocationRelativeTo(null);//Para centrar el JDialog

        modelCboTipoInsumo_Sub.addElement("1");
        modelCboTipoInsumo_Sub.addElement("2");
//        modelCboTipoInsumo_Sub.addElement("3");
        cboSubCategoria.addItem("Cant - Herramientas");
        cboSubCategoria.addItem("Cuad - Equipos");
//        cboSubCategoria.addItem("Porcentajes");
        metodos._iconJDialog(this);
    }
//___________________________________________________________________________________ Soy una barra separadora :)
    public void cargar_combo() {
        metodos.comboboxLlenar(cboUnidad, modelCboUnidad, "SELECT idunidad,concat(' ',nombre,' [',simbolo,']') FROM unidad");
        metodos.comboboxLlenar(cboTipoDeInsumo, modelCboTipoInsumo, "SELECT idinsumo_tipo,nombre FROM insumo_tipo");
        metodos.comboboxLlenar(cboCategoriaInsumo, modelCboCategoriaInsumo, "SELECT idinsumo_indice,concat(idinsumo_indice,'-',descripcion) FROM insumo_indice");

    }

    public void Nuevo() {
        cargar_combo();
        //        lblFechaIngreso.setText(metodos._getFechaHoraActual());
//        lblFechaModificado.setVisible(false);
//        lblFechaModificadoTitle.setVisible(false);
//        pnlDatos.setSize(new Dimension(pnlDatos.getWidth(), 280));
    }

    public void Editar() {
        cargar_combo();
//        pnlDatos.setSize(new Dimension(pnlDatos.getWidth(), 340));
//        lblFechaModificado.setVisible(true);
//        lblFechaModificadoTitle.setVisible(true);

        int fila = table.getSelectedRow();//Obtenemos la fila seleccionada
        if (fila != -1) {//Si no se a seleccionado alguna row de la Tabla hacer...
            String id = table.getValueAt(fila, 0).toString();
            Object[][] datos = bd.select("insumo",
                    "idinsumo,nombre,precio,idinsumo_tipo,idunidad,idusuario,estado,fechaingreso,fechamodificado,idinsumo_indice,subcatergoria",
                    "idinsumo='" + id + "' ");
//            System.err.println("id: "+id);
//            System.err.println("id.substring: "+id.substring(2, id.length()));
            if (datos != null) {
                idInsumoEditar = datos[0][0].toString();
                txaDescripcion.setText(datos[0][1].toString());
                txtPrecio.setText(datos[0][2].toString());
                cboTipoDeInsumo.setSelectedIndex(modelCboTipoInsumo.getIndexOf(datos[0][3].toString()));
                cboUnidad.setSelectedIndex(modelCboUnidad.getIndexOf(datos[0][4].toString()));
//                if (datos[0][6].equals("A")) {
//                    tgbInactivo.setSelected(false);
//                    tgbActivo.setSelected(true);
//                }else{
//                    tgbActivo.setSelected(false);
//                    tgbInactivo.setSelected(true);
//                }
//                lblFechaIngreso.setText(datos[0][7].toString());
//                lblFechaModificado.setText(metodos._getFechaHoraActual());
                cboCategoriaInsumo.setSelectedIndex(modelCboCategoriaInsumo.getIndexOf(datos[0][9].toString()));
                //SubCategoria
                cboSubCategoria.setVisible(false);
                lblSubCategoria.setVisible(false);
                cboSubCategoria.setSelectedIndex(1);
                no_porcentaje = datos[0][10].toString();
                if (datos[0][3].equals("3") && datos[0][10].equals("3") == false) {
                    cboSubCategoria.setVisible(true);
                    lblSubCategoria.setVisible(true);
                    cboSubCategoria.setSelectedIndex(modelCboTipoInsumo_Sub.getIndexOf(datos[0][10].toString()));
                }
                // si es herraminetas y equipos
                if (datos[0][10].equals("3")) {
                    cboTipoDeInsumo.setEnabled(false);
                    cboSubCategoria.setEnabled(false);
                    cboUnidad.setEnabled(false);
                }

                txaDescripcion.setSelectionStart(0);
                txaDescripcion.setSelectionEnd(txaDescripcion.getText().length());
                editarUpdate = true;
                setVisible(true);
            } else {
                System.err.println("------------------------>ERROR NO PREVISTO<--------------------------------");
            }
        } else {
            javax.swing.JOptionPane.showMessageDialog(this, "Seleccione un insumo");
            this.dispose();
        }
    }

    public void Guardar() {
        if (txtPrecio.getText().length() == 0) {
            JOptionPane.showMessageDialog(this, "Ingrese el precio");
            return;
        }
        if (Double.parseDouble(txtPrecio.getText()) == 0) {
            JOptionPane.showMessageDialog(this, "El precio debe ser mayor a cero");
            return;
        }
        String nombreString = txaDescripcion.getText().toString();
        boolean seRepite = true;
        if (editarUpdate) {//Si se presiona EDITAR, entonces el nombre se actualiza, no es un INSERT
            seRepite = false;
        } else {//Verificamos si se repite
            seRepite = bd.verif_repite("SELECT nombre FROM insumo WHERE nombre='" + nombreString + "'");
        }
        if (!seRepite) {//Si no se repite
            if (ClsValidacion.tieneCamposVacios(pnlDatos)) {
                JOptionPane.showMessageDialog(null, "Se tiene que llenar todos los campos");
                return;
            }
            double precio = Double.parseDouble(txtPrecio.getText().toString());
            idCategoriaInsumo = modelCboCategoriaInsumo.getElementAt(cboCategoriaInsumo.getSelectedIndex()).toString();
            idTipoDeInsumo = modelCboTipoInsumo.getElementAt(cboTipoDeInsumo.getSelectedIndex()).toString();
            idUnidad = modelCboUnidad.getElementAt(cboUnidad.getSelectedIndex()).toString();
            idUsuario = ClsSesion.iduser;//Accedemos al ID del Usuario
            //Para SubCategoria
            int subCateg = 1;
            System.out.println("idTipoDeInsumo: " + idTipoDeInsumo);
            if (idTipoDeInsumo.equals("3") && no_porcentaje.equals("3") == false) {
                System.out.println("Si es igual a 3 osea Herram. y Equip.");
                subCateg = Integer.parseInt(modelCboTipoInsumo_Sub.getElementAt(cboSubCategoria.getSelectedIndex()).toString());
                System.out.println("subCateg: " + subCateg);
            }
            //para el desgaste de herramientas
            if (no_porcentaje.equals("3")) {
                subCateg = 3;
            }

            String estadoString = "";
//            if (tgbActivo.getText().equals("Activo")) {
            estadoString = "A";
//            }else{
//                estadoString="I";
//            }

            //Para la Fecha de Ingreso como de Modificado
            String fechaString = "fecha", fechaValueString = "";
            if (editarUpdate) {
                //UPDATE
                fechaString += "modificado";
//                fechaValueString=lblFechaModificado.getText().toString();
                //Realizamos la consulta
                boolean seUpdate = bd.update("insumo",
                        //SET
                        "nombre='" + nombreString + "',precio='" + precio + "',idinsumo_tipo='" + idTipoDeInsumo
                        + "',idunidad='" + idUnidad + "',idusuario='" + idUsuario + "',estado='" + estadoString + "',"
                        + "" + fechaString + "=" + "curdate()" + ",idinsumo_indice='" + idCategoriaInsumo + "',subcatergoria='" + subCateg + "'",
                        //WHERE
                        "idinsumo='" + idInsumoEditar + "' ");
//                dialog.idString=idInsumoEditar;
                if (!seUpdate) {
                    JOptionPane.showMessageDialog(null, "No se pudo Actualizar el insumo");
                }
                editarUpdate = false;
            } else {
                //INSERT
                fechaString += "ingreso";
//                fechaValueString=lblFechaIngreso.getText().toString();
                //Generamos el codigo de INSUMO, teniendo encuenta la Categoria elegida
                idInsumoEditar = metodos.generarCodigollaves("SELECT count(idinsumo) FROM insumo", 5);
                System.err.println("idInsumo para el INSERT: " + idInsumoEditar);
                //Realizamos la consulta
                boolean seInserto = bd.insert("insumo",
                        "idinsumo,nombre,precio,idinsumo_tipo,idunidad,idusuario,estado,idinsumo_indice," + fechaString
                        + ",subcatergoria",
                        //VALUES
                        "'" + idInsumoEditar + "','" + nombreString + "','" + precio + "','" + idTipoDeInsumo + "','" + idUnidad + "','" + idUsuario
                        + "','" + estadoString + "','" + idCategoriaInsumo + "',curdate()," + subCateg + "");
                if (!seInserto) {
                    JOptionPane.showMessageDialog(null, "No se pudo crear el Nuevo insumo");
                }
            }

            dialog._iniciar();
            this.dispose();
        } else {
            JOptionPane.showMessageDialog(null, "Ya existe ese Nombre!!!");
            txaDescripcion.requestFocus();
            txaDescripcion.setSelectionStart(0);
            txaDescripcion.setSelectionEnd(txaDescripcion.getText().length());
        }
    }

    public void Cancelar() {
        this.dispose();
    }

    public void _limpiar() {
        txaDescripcion.setText("");
        txtPrecio.setText("");
        txaDescripcion.requestFocus();
        cboCategoriaInsumo.setSelectedIndex(-1);
        cboTipoDeInsumo.setSelectedIndex(-1);
        cboUnidad.setSelectedIndex(-1);
        cboSubCategoria.setSelectedIndex(-1);
    }
//___________________________________________________________________________________ Soy una barra separadora :)

    /**
     * This method is called from within the constructor to initialize the form.
     * WARNING: Do NOT modify this code. The content of this method is always
     * regenerated by the Form Editor.
     */
    @SuppressWarnings("unchecked")
    // <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-BEGIN:initComponents
    private void initComponents() {

        jPanel1 = new javax.swing.JPanel();
        pnlDatos = new javax.swing.JPanel();
        jLabel2 = new javax.swing.JLabel();
        jLabel3 = new javax.swing.JLabel();
        txtPrecio = new javax.swing.JTextField();
        jLabel4 = new javax.swing.JLabel();
        jLabel5 = new javax.swing.JLabel();
        cboUnidad = new javax.swing.JComboBox();
        cboTipoDeInsumo = new javax.swing.JComboBox();
        jLabel10 = new javax.swing.JLabel();
        cboCategoriaInsumo = new javax.swing.JComboBox();
        lblSubCategoria = new javax.swing.JLabel();
        cboSubCategoria = new javax.swing.JComboBox();
        jScrollPane1 = new javax.swing.JScrollPane();
        txaDescripcion = new javax.swing.JTextArea();
        btnGuardar = new javax.swing.JButton();
        btnCancelar = new javax.swing.JButton();
        jLabel11 = new javax.swing.JLabel();

        setDefaultCloseOperation(javax.swing.WindowConstants.DISPOSE_ON_CLOSE);
        setTitle("Datos de Insumo");

        jPanel1.setBackground(new java.awt.Color(225, 235, 247));
        jPanel1.setLayout(new org.netbeans.lib.awtextra.AbsoluteLayout());

        pnlDatos.setBorder(javax.swing.BorderFactory.createTitledBorder(""));
        pnlDatos.setOpaque(false);
        pnlDatos.setPreferredSize(new java.awt.Dimension(121, 291));
        pnlDatos.setLayout(new org.netbeans.lib.awtextra.AbsoluteLayout());

        jLabel2.setHorizontalAlignment(javax.swing.SwingConstants.RIGHT);
        jLabel2.setText("Descripción:");
        pnlDatos.add(jLabel2, new org.netbeans.lib.awtextra.AbsoluteConstraints(16, 16, 94, -1));

        jLabel3.setHorizontalAlignment(javax.swing.SwingConstants.RIGHT);
        jLabel3.setText("Precio:");
        pnlDatos.add(jLabel3, new org.netbeans.lib.awtextra.AbsoluteConstraints(16, 80, 94, 10));

        txtPrecio.addKeyListener(new java.awt.event.KeyAdapter() {
            public void keyTyped(java.awt.event.KeyEvent evt) {
                txtPrecioKeyTyped(evt);
            }
        });
        pnlDatos.add(txtPrecio, new org.netbeans.lib.awtextra.AbsoluteConstraints(120, 75, 100, -1));

        jLabel4.setHorizontalAlignment(javax.swing.SwingConstants.RIGHT);
        jLabel4.setText("Tipo de Insumo:");
        pnlDatos.add(jLabel4, new org.netbeans.lib.awtextra.AbsoluteConstraints(16, 146, 95, -1));

        jLabel5.setHorizontalAlignment(javax.swing.SwingConstants.RIGHT);
        jLabel5.setText("Unidad:");
        pnlDatos.add(jLabel5, new org.netbeans.lib.awtextra.AbsoluteConstraints(16, 208, 95, -1));

        cboUnidad.setModel(new javax.swing.DefaultComboBoxModel(new String[] { "Item 1", "Item 2", "Item 3", "Item 4" }));
        pnlDatos.add(cboUnidad, new org.netbeans.lib.awtextra.AbsoluteConstraints(121, 205, 228, -1));

        cboTipoDeInsumo.setModel(new javax.swing.DefaultComboBoxModel(new String[] { "Item 1", "Item 2", "Item 3", "Item 4" }));
        cboTipoDeInsumo.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                cboTipoDeInsumoActionPerformed(evt);
            }
        });
        pnlDatos.add(cboTipoDeInsumo, new org.netbeans.lib.awtextra.AbsoluteConstraints(121, 140, 332, -1));

        jLabel10.setHorizontalAlignment(javax.swing.SwingConstants.RIGHT);
        jLabel10.setText("Índice Unificado:");
        pnlDatos.add(jLabel10, new org.netbeans.lib.awtextra.AbsoluteConstraints(16, 109, 94, -1));

        cboCategoriaInsumo.setModel(new javax.swing.DefaultComboBoxModel(new String[] { "Item 1", "Item 2", "Item 3", "Item 4" }));
        pnlDatos.add(cboCategoriaInsumo, new org.netbeans.lib.awtextra.AbsoluteConstraints(120, 106, 333, -1));

        lblSubCategoria.setHorizontalAlignment(javax.swing.SwingConstants.RIGHT);
        lblSubCategoria.setText("Sub Categoría:");
        pnlDatos.add(lblSubCategoria, new org.netbeans.lib.awtextra.AbsoluteConstraints(16, 177, 95, -1));

        pnlDatos.add(cboSubCategoria, new org.netbeans.lib.awtextra.AbsoluteConstraints(121, 171, 332, -1));

        txaDescripcion.setColumns(20);
        txaDescripcion.setFont(new java.awt.Font("Tahoma", 0, 11)); // NOI18N
        txaDescripcion.setLineWrap(true);
        txaDescripcion.setRows(3);
        txaDescripcion.setWrapStyleWord(true);
        txaDescripcion.addKeyListener(new java.awt.event.KeyAdapter() {
            public void keyPressed(java.awt.event.KeyEvent evt) {
                txaDescripcionKeyPressed(evt);
            }
            public void keyTyped(java.awt.event.KeyEvent evt) {
                txaDescripcionKeyTyped(evt);
            }
        });
        jScrollPane1.setViewportView(txaDescripcion);

        pnlDatos.add(jScrollPane1, new org.netbeans.lib.awtextra.AbsoluteConstraints(120, 16, 333, -1));

        jPanel1.add(pnlDatos, new org.netbeans.lib.awtextra.AbsoluteConstraints(10, 20, 470, 263));

        btnGuardar.setText("Aceptar");
        btnGuardar.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                btnGuardarActionPerformed(evt);
            }
        });
        jPanel1.add(btnGuardar, new org.netbeans.lib.awtextra.AbsoluteConstraints(10, 290, 95, -1));

        btnCancelar.setText("Cancelar");
        btnCancelar.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                btnCancelarActionPerformed(evt);
            }
        });
        jPanel1.add(btnCancelar, new org.netbeans.lib.awtextra.AbsoluteConstraints(390, 290, 93, -1));

        jLabel11.setIcon(new javax.swing.ImageIcon(getClass().getResource("/resource/icon/principales/fondo_dialog.jpg"))); // NOI18N
        jPanel1.add(jLabel11, new org.netbeans.lib.awtextra.AbsoluteConstraints(0, 0, 450, 330));

        javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
        getContentPane().setLayout(layout);
        layout.setHorizontalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(layout.createSequentialGroup()
                .addComponent(jPanel1, javax.swing.GroupLayout.PREFERRED_SIZE, 495, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addGap(0, 0, Short.MAX_VALUE))
        );
        layout.setVerticalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addComponent(jPanel1, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
        );

        pack();
    }// </editor-fold>//GEN-END:initComponents

    private void btnGuardarActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_btnGuardarActionPerformed
        Guardar();
    }//GEN-LAST:event_btnGuardarActionPerformed

    private void btnCancelarActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_btnCancelarActionPerformed
        dispose();
    }//GEN-LAST:event_btnCancelarActionPerformed

    private void cboTipoDeInsumoActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_cboTipoDeInsumoActionPerformed
        if (cboTipoDeInsumo.getSelectedIndex() == 2) {
            lblSubCategoria.setVisible(true);
            cboSubCategoria.setVisible(true);
            cboSubCategoria.setEnabled(true);
            cboSubCategoria.setSelectedIndex(-1);
        } else {
            cboSubCategoria.setSelectedIndex(0);///OBS
            lblSubCategoria.setVisible(false);
            cboSubCategoria.setVisible(false);
        }
    }//GEN-LAST:event_cboTipoDeInsumoActionPerformed

    private void txtPrecioKeyTyped(java.awt.event.KeyEvent evt) {//GEN-FIRST:event_txtPrecioKeyTyped
//        contraladorEventos.soloNumerosDecimales(evt, txtPrecio);
        contraladorEventos.soloNumerosDecimales(evt, txtPrecio, 2);
    }//GEN-LAST:event_txtPrecioKeyTyped

    private void txaDescripcionKeyPressed(java.awt.event.KeyEvent evt) {//GEN-FIRST:event_txaDescripcionKeyPressed
        // TODO add your handling code here:
    }//GEN-LAST:event_txaDescripcionKeyPressed

    private void txaDescripcionKeyTyped(java.awt.event.KeyEvent evt) {//GEN-FIRST:event_txaDescripcionKeyTyped
        contraladorEventos.cantidadMaximaCaracteresJTextArea(evt, txaDescripcion, 200);
    }//GEN-LAST:event_txaDescripcionKeyTyped

    /**
     * @param args the command line arguments
     */
    public static void main(String args[]) {
        /* Set the Nimbus look and feel */
        //<editor-fold defaultstate="collapsed" desc=" Look and feel setting code (optional) ">
        /* If Nimbus (introduced in Java SE 6) is not available, stay with the default look and feel.
         * For details see http://download.oracle.com/javase/tutorial/uiswing/lookandfeel/plaf.html 
         */
        try {
            for (javax.swing.UIManager.LookAndFeelInfo info : javax.swing.UIManager.getInstalledLookAndFeels()) {
                if ("Nimbus".equals(info.getName())) {
                    javax.swing.UIManager.setLookAndFeel(info.getClassName());
                    break;
                }
            }
        } catch (ClassNotFoundException ex) {
            java.util.logging.Logger.getLogger(dlg_NewInsumo.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
        } catch (InstantiationException ex) {
            java.util.logging.Logger.getLogger(dlg_NewInsumo.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
        } catch (IllegalAccessException ex) {
            java.util.logging.Logger.getLogger(dlg_NewInsumo.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
        } catch (javax.swing.UnsupportedLookAndFeelException ex) {
            java.util.logging.Logger.getLogger(dlg_NewInsumo.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
        }
        //</editor-fold>

        /* Create and display the dialog */
        java.awt.EventQueue.invokeLater(new Runnable() {
            public void run() {
                dlg_NewInsumo dialog = new dlg_NewInsumo(new javax.swing.JFrame(), true);
                dialog.addWindowListener(new java.awt.event.WindowAdapter() {
                    @Override
                    public void windowClosing(java.awt.event.WindowEvent e) {
                        System.exit(0);
                    }
                });
                dialog.setVisible(true);
            }
        });
    }
    // Variables declaration - do not modify//GEN-BEGIN:variables
    private javax.swing.JButton btnCancelar;
    private javax.swing.JButton btnGuardar;
    private javax.swing.JComboBox cboCategoriaInsumo;
    private javax.swing.JComboBox cboSubCategoria;
    private javax.swing.JComboBox cboTipoDeInsumo;
    private javax.swing.JComboBox cboUnidad;
    private javax.swing.JLabel jLabel10;
    private javax.swing.JLabel jLabel11;
    private javax.swing.JLabel jLabel2;
    private javax.swing.JLabel jLabel3;
    private javax.swing.JLabel jLabel4;
    private javax.swing.JLabel jLabel5;
    private javax.swing.JPanel jPanel1;
    private javax.swing.JScrollPane jScrollPane1;
    private javax.swing.JLabel lblSubCategoria;
    private javax.swing.JPanel pnlDatos;
    private javax.swing.JTextArea txaDescripcion;
    private javax.swing.JTextField txtPrecio;
    // End of variables declaration//GEN-END:variables
}
